home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-04-06 | 38.9 KB | 996 lines | [TEXT/CWIE] |
- ========================================================================
- Metrowerks MSL 2.4 Pro 3 Release Notes
- ========================================================================
-
- Version: Metrowerks CodeWarrior 2.4, Pro 3
- Date: March 19, 1998
- Authors: Vicki Scott, Michael Marcotty, Matt Fassiotto, Ron Liechty,
- Howard Hinnant
-
- ========================================================================
-
- ========================================================================
- New Features in This Version
- ========================================================================
-
- * The value for __MSL__ has been changed to reflect the major and minor
- release identifier, and revision within that category. Therefore,
- the value for __MSL__ for all MSL2.4 releases is 0x24nn, where 24
- refers to the major/minor release identifier (e.g., MSL 2.4), and nn
- refers to the revision within the release. In the past, this value
- was inconsistent (i.e., it was 212 for Pro1, 22 for Pro2). Hence,
- you may see release id's of 0x2402, 0x2403, 0x2500, and so on - meaning
- MSL 2.4, revision 3 (i.e., MSL 2.4fc3), MSL 2.4, revision 3 (i.e.,
- MSL 2.4p1 - MSL 2.4, patch 1), MSL 2.5 (i.e., MSL 2.5a1 - first alpha
- prerelease of 2.5).
-
- * C9X functions for x86:
- - full implementation of the floating point unit interface as
- specified in fenv.h; additional functions feset/getprec
- - Implemented macros/functions isnormal, fpclassify, signbit, atanh,
- acosh, asinh, all rounding functions, exp2, expm1, log2, remainder,
- and remquo (fpce.obj)
-
- * SIOUX for Windows. This is a preliminary version that will allow
- printing of a file, saving standard output to a file, and scrolling.
- Additional SIOUX interface will be in the next release (e.g., cut
- and paste, fonts, open and close files). See notes below on
- "WinSIOUX in MSL 2.4" on how to use this feature.
-
- * C++ library closely tracking the November 1997 Draft Standard. There are
- many changes in the routines, so please read the section on "C++
- Library Update" below carefully to see if it affects your exiting
- codes.
-
- * Ability to select C++ standard behavior for <cmath> or select
- the existing <math.h> C functionality in your C++ programs. See
- notes below on "Notes on <cmath> vs. <math.h>" and "Header Naming
- in MSL2.4" for details. The default action for a C++ program in this
- release is to behave like a C <math.h> file, even when the C++ compiler
- is selected by file type or by preference. In future releases, we may
- convert the C++ behavior to the intended C++ header specification, so
- it would be wise to convert your programs as needed.
-
- * C header files have been changed from <name.h> to <cname> to
- accommodate the changes in the C++ library without code duplication.
- Please read notes below on "Header Naming in MSL2.4" as it may affect
- your exiting codes. When opening header files of the form <name.h> in
- your applications, you will see that the <cname> file is an include
- where the <cname> file actually contains all the code from the
- original <name.h> file. We have included all the header names in
- the project files to facilitate faster opening of the header files.
-
- * C++ header files now comply to the Standard in name and in content.
- This may affect what files you are currently including. For example,
- <bstring.h> is now <string>. Please read the notes on "Header Naming
- in MSL2.4" to see if your file includes have been affected.
-
- * Namespace std is fully supported in libraries. Please read notes
- "Namespace std Implementation in MSL 2.4" below carefully, as this is
- likely to affect your existing codes. You may turn namespace std
- off and rebuild the library if you wish.
-
- * Removed the need to include ansi_prefix files in the project file
- preferences. All prefix files have been removed from the MSL library
- projects.
-
- * Wide character support for the C library (C9X version). But wide
- character support is not yet available in the C++ library. Multibyte
- support is not yet available in either library. See notes below on
- "Wide Character Support in MSL 2.4" for implementation details.
-
- * Improved pool_alloc routines to support new functions in Zone
- Ranger for the Mac platforms.
-
- * WASTE for Mac has been upgraded to 1.3 version. Please note that
- the directory "WASTE C/C++ Headers" has been removed and the files
- (LongCoords.h and WASTE.h) from that directory have been moved
- into a new directory, Public Includes, under WASTE 1.3.
-
- * POSIX stat/fstat function for x86 now implemented.
-
- * stdio.h (cstdio): Added snprintf and vsnprintf functions from C9X
- Standard. For x86 platforms, _snprintf and _vsnprintf are aliases
- for compatibility with legacy code.
-
-
- ========================================================================
- Bugs Fixed in This Version
- ========================================================================
-
- * All known memory leaks in the C++ library are fixed
-
- * mem_fun routines in C++ now operational
-
- * abort_exit.c
- Fixes a bug in close of console window on the x86 when stdin has
- been closed.
-
- * complex.h
- Removed extraneous declaration of pow function.
-
- * Numerous C++ headers
- Removed all "#pragma dont_inline" statements for template functions.
- This was a bug introduced in CWP2 where some of the statements had
- been removed, but not all of them, causing inlining to be off in
- C++ functions.
-
- * scanf.c
- Fixed a bug with the return value.
-
- * math.h
- (MW02783)
- Fixed a bug in classification macros where parenthesis were missing.
-
- * iterator
- Move iterator fix from mcompile.h to iterator header file - see
- notes below on __MSL_FIX_ITERATORS__ for details.
-
- * Fixed auto_ptr to use mutable.
-
- * buffer_io.c, file_pos.c
- Fixed a problem with EOL differences between Mac and Win32.
-
- * file_io.mac.c, path2fss.c
- Allows "." files to be opened on a Mac.
-
- * printf.c
- Allowed the lf (ell f) specifier for doubles for backward compatibility
- with older C libraries. The Standard states that lf is undefined, and
- we chose to require Lf for doubles; however, legacy codes will not
- execute properly under this constraint, so it has been relaxed in MSL.
-
- To bring MSL C more in accord with the C9X Standard, we have added the
- hh length specifier for use with the d, i, o, u, x, and X conversion
- specifiers to signify that they apply to long long int or unsigned long
- long int arguments. Previously, long long was specified as L (capital
- ell). This is no longer supported.
-
- ========================================================================
- Known Bugs and Incompatibilities
- ========================================================================
-
- * slist and hash are not operational yet
-
- * auto_ptr is implemented to the Nov 96 Standard, not Nov 97 Standard
-
- * mem_fun_t functions do not meet ANSI Standard. (This will be fixed
- and will be in the next patch.)
-
- * locale incorrectly defines isprint, isspace, iscntrl, et al., as
- is_print, is_space, is_cntrl, .... (This has been fixed and will be
- in the next patch.)
-
- * multibyte routines not implemented at all yet, and wide character
- support is not available in C++
-
- * DebugNew - library no longer redefines new; still does not
- support the array delete[] operator; memory leak reporting more
- leaks than there actually are (MW02460)
-
- * iterator_traits depends on a partial template specialization for
- pointer based iterator types. Partial specializations are not
- supported by the compiler yet, so the __MSL_FIX_ITERATORS__ macro
- is still required for the iterator traits specializations. Please
- refer to note below for information on when and how to use these
- macros.
-
- * Compiling locimp will take a considerable amount of time and
- memory (this *will* be fixed in Pro4). If your computer appears
- to lock up compiling locimp, be patient; it will eventually
- complete. Set your virtual memory >=64K if you have sufficient
- ram. (MW02103)
-
- * MW00042
- On Mac, O_RDWR mode for fopen incorrectly sets value to 0x0
-
- * MW00095
- stdio.h declares bitfield file_kind to be 2-bits, but the related
- enum declares 5 different values - bitfield is too short
-
- * Numerous win32 descrepancies:
- MW00273
- MW00288
- MW00302
- MW01564
- MW01597
- MW01785
- MW02761
- MW02814
- MW02944
- MW05905
- POSIX exec functions, tzset missing on win32
- putenv, _environ, __argc, __argv missig on win32
- _ltow, tapi.h, winioctl.h missing on win32
- some win32 constants are not set in MSL
- win32 signal handler appears to fail at catching SIGINT
- _access() won't read file if path is a directory in win32
-
- * MW02614
- MW02687
- On 68K for 8-byte doubles, using function pointers to ANSI math
- functions do not work.
-
- * MW01261
- Precision of printing doubles is incorrect even when values are
- exact (e.g., int).
-
- * MW03295
- On Mac, cannot set creator and file type
-
- * MW03327
- cin goes into an infinite loop if wrong data type entered (e.g.,
- declare an input type to be integer and provide an ascii char as
- input)
-
- ========================================================================
- Additional Notes
- ========================================================================
-
- Disclaimer:
-
- This library represents a major step forward in providing fully Standard
- compliant C and C++ libraries. We strongly desire to be responsive to
- users' requests and needs; however, our position is that we uphold and
- implement the Standards behavior in both the C and C++ libraries. If a
- behavior was provided by MSL but goes against the Standard, we reserve
- the right to modify the behavior to comply fully with the Standard. If,
- however, a behavior is unspecified or not specifically forbidden by the
- Standard, we will continue to support it in the library. We reserve the
- right to use our discretion in implementing non-standard and
- non-specified C and C++ library behavior.
-
- ===================================================================
- __MSL_FIX_ITERATORS__
- ===================================================================
-
- A design change in MSL 2.4 <vector> requires more aggressive use of the
- __MSL_FIX_ITERATORS__ macro. So you may find that code which compiled
- under Pro2 no longer compiles under Pro3 unless you add the macro for
- your user defined class. We anticipate a fix to this in mid-summer,
- Pro 4 at the latest, and apologize for the inconvenience this has
- caused. When you use a class that contains interator_traits, you must
- use the macro. For example, Pro 3 uses the method uninitialized_copy
- during push_back in class vector (note that deque does not use this
- method, so the macro will not be required when you use deque). Since
- function uninitialized_copy requires iterator_traits, you will need
- the macro. The following example demonstrates:
-
- #include <vector>
-
- struct Foo { }; // user defined class
- __MSL_FIX_ITERATORS__(Foo); // macro will allow usage of iterator
-
- void p()
- {
- Foo x;
- std::vector<Foo> pfoo;
- pfoo.push_back(x);
- }
-
- If you do not provide the macro, you will get a compile time syntax
- error when instantiating iterator_traits on your class. Sometimes
- it is difficult to know why you got a syntax error, especially in a
- library routine. The give away is instantiating iterator_traits in
- the iterator class. When you see this, you know you must add the
- macro.
-
- There are four macros:
-
- class user_class { }
-
- __MSL_FIX_ITERATORS__ (user_class);
- __MSL_FIX_ITERATORS__ (const user_class);
- __MSL_FIX_ITERATORS__ (user_class *);
- __MSL_FIX_ITERATORS__ (user_class * const);
-
- Use the macro definition appropriate for your class.
-
- ===================================================================
- * C++ Library Update
- ===================================================================
-
- The standard C++ library is now under namespace std. This will
- require either "using namespace std;" or a std:: prefix on names in
- the library. The library itself has also had a major upgrade to bring
- it much closer to the C++ standard.
-
- <exception>
- class exception no longer takes a string or const char* in its
- constructor.
-
- <new>
- You can now override
- void* operator new[](std::size_t size) throw(std::bad_alloc);
- and
- void operator delete[](void* ptr) throw();
-
- <typeinfo>
- class bad_cast no longer accepts a string or const char* in its
- constructor. It now has a what() method.
-
- class bad_typeid now has a what() method.
-
- <limits>
- enum float_denorm_style has been added. All of the numeric_limits
- classes have been rewritten to be both complete and correct.
-
- <stdexcept>
- All of the standard exception classes now have explicit constructors.
- The class underflow_error has been added.
-
- <utility>
- No interface changes (besides being put into namespace std).
-
- <memory>
- uninitialized_fill_n() has a void return type.
-
- class allocator has:
- const_pointer address (const_reference x) const;
- void destroy (pointer p);
- and has not:
- size_type init_page_size ();
- size_type init_page_size_small ();
-
- The copy constructor and assignment operator in auto_ptr now take
- const arguments.
-
- auto_ptr has no
- bool owns(void);
-
- <functional>
-
- 20.3.8 Adaptors for pointers to members [lib.member.pointer.adaptors]
- has been partially implemented (omissions noted below).
-
- Implemented in MSL:
- template<class S, class T> class mem_fun_t;
- template<class S, class T, class A> class mem_fun1_t;
- template<class S, class T>
- mem_fun_t<S,T> mem_fun(S (T::*f)());
- template<class S, class T> class mem_fun_ref_t;
- template<class S, class T, class A> class mem_fun1_ref_t;
- template<class S, class T>
- mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)());
-
- Not yet implemented in MSL:
- template<class S, class T, class A>
- mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A));
- template<class S, class T, class A>
- mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A));
-
- template <class S, class T> class const_mem_fun_t;
- template <class S, class T, class A> class const_mem_fun1_t;
- template <class S, class T>
- const_mem_fun_t<S,T> mem_fun(S (T::*f)() const);
- template <class S, class T, class A>
- const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const);
- template <class S, class T> class const_mem_fun_ref_t;
- template <class S, class T, class A> class const_mem_fun1_ref_t;
- template <class S, class T>
- const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const);
- template <class S, class T, class A>
- const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const);
-
- <iterator>
-
- class global_iterator has been renamed to iterator
- iterator::distance_type renamed to iterator::difference_type.
- pointer and reference typedefs added to iterator.
-
- class iterator_trait renamed to iterator_traits.
- iterator_traits::distance_type renamed to
- iterator_traits::difference_type.
- pointer and reference typedefs added to iterator_traits.
-
- Non-standard structs output_iterator, input_iterator, forward_iterator,
- bidirectional_iterator and random_access_iterator removed.
-
- reverse_bidirectional_iterator removed.
-
- operator()-> has been added to all iterators, including the iterators
- defined for all container classes.
-
- <algorthim>
- no interface changes.
-
- Notes for all container classes:
-
- User supplied allocators are not going to work properly until we have
- "member template" support from the compiler. We apologize for any
- inconvenience, and are working to remedy this situation as soon as
- possible.
-
- The containers are now "exception safe". That is, they have a well
- defined, usable state after they throw an exception.
-
- <string>
-
- no interface changes.
-
- <list>
-
- no interface changes.
-
- <bitset>
-
- no interface changes.
-
- <deque>
-
- no interface changes.
-
- <vector>
-
- vector<bool> is now a template specialization. This class has a method
- called flip() that is not present in the general template.
-
- <queue>
-
- no interface changes.
-
- <stack>
-
- In Pro 2, the user of <stack> had to include <deque> first. This is no
- longer the case.
-
- <map>
-
- no interface changes.
-
- <set>
-
- The members begin(), end(), rbegin() and rend() now come in const and
- non-const versions.
-
- <complex>
-
- <complex> no longer includes the I/O library. This means that if you
- don't want to do I/O with your complex numbers, you don't have to drag
- the I/O around in the headers. But if you do want to do I/O with your
- complex numbers, then you have to include the proper I/O headers
- explicitly. This behavior is consistent with other classes such as
- string and valarray.
-
- complex<T> pow (const complex<T>& cx, T re) has been removed. There is
- still a complex<T> pow (const complex<T>& cx, const T& re)
-
- The value returned by complex<T> tanh (const complex<T>& cx) has been cut in half
- to comply with standard mathematical definitions.
-
- <numeric>
-
- no interface changes.
-
- <valarray>
-
- valarray is no longer specialized for different types (although the user
- is free to do this). valarray is now fully functional as a generic
- template class.
-
- Notes on the I/O library
-
- All of the I/O headers and sources have been completely rewritten to be
- more robust, higher performance and closer to the C++ standard. Only the
- most advanced use of certain parts of the I/O library should reveal any
- interface changes since Pro 2. The standard I/O interfaces remain
- unchanged.
-
-
- ===================================================================
- * Namespace std Implementation in MSL 2.4
- ===================================================================
-
- You can turn namespaces on and off. It is on by default. To turn it
- off, do the following:
-
- 1. #define or comment out _MSL_USING_NAMESPACE in mslGlobals.h.
-
- 2. Recompile the libraries using either the project files in the bin
- directories, or use the build script. If you use precompiled headers,
- don't forget to recompile them first.
-
- The namespace update has a great deal of backward compatibility built
- into it. Part of this backward compatibility is dictated by the C++
- standard. Part of it is offered as an extension to the standard by
- Metrowerks. The bottom line is that your namespace-ignorant code is
- likely to compile and run just fine! If not, the fix to make it run
- should be very easy (explained below).
-
- The Nov. '97 standard defines the following headers:
-
- Table 2--C++ Library Headers
-
- +------------------------------------------------------------------+
- |<algorithm> <iomanip> <list> <ostream> <streambuf> |
- |<bitset> <ios> <locale> <queue> <string> |
- |<complex> <iosfwd> <map> <set> <typeinfo> |
- |<deque> <iostream> <memory> <sstream> <utility> |
- |<exception> <istream> <new> <stack> <valarray> |
- |<fstream> <iterator> <numeric> <stdexcept> <vector> |
- |<functional> <limits> |
- +------------------------------------------------------------------+
-
- 3 The facilities of the Standard C Library are provided in 18 additional
- headers, as shown in Table 3:
-
- Table 3--C++ Headers for C Library Facilities
-
- +--------------------------------------------------+
- |<cassert> <ciso646> <csetjmp> <cstdio> <ctime> |
- |<cctype> <climits> <csignal> <cstdlib> <cwchar> |
- |<cerrno> <clocale> <cstdarg> <cstring> <cwctype> |
- |<cfloat> <cmath> <cstddef> |
- +--------------------------------------------------+
-
- All of these headers bury the C++ and C libraries under namespace std.
- This means that printf is now named std::printf, and cout is now named
- std::cout.
-
- Don't panic, help is on the way! The standard defines the following
- headers for backward compatibility:
-
- Table 1--C Headers
-
- +----------------------------------------------------------------+
- | <assert.h> <iso646.h> <setjmp.h> <stdio.h> <wchar.h> |
- | <ctype.h> <limits.h> <signal.h> <stdlib.h> <wctype.h> |
- | <errno.h> <locale.h> <stdarg.h> <string.h> |
- | <float.h> <math.h> <stddef.h> <time.h> |
- +----------------------------------------------------------------+
-
- If you use these headers instead of the <cstdio> type guys, then the
- symbol std::printf will appear to be named printf in your program.
-
- Additionally, Metrowerks defines the following compatibility headers:
-
- +----------------------------------------------------------------------+
- |<algorithm.h> <functional.h> <list.h> <ostream.h> <streambuf.h> |
- |<bitset.h> <iomanip.h> <map.h> <queue.h> <typeinfo.h> |
- |<bstring.h> <ios.h> <mlimits.h> <set.h> <typeinfo.h> |
- |<complex.h> <iosfwd.h> <mlocale.h> <sstream.h> <utility.h> |
- |<deque.h> <iostream.h> <new.h> <stack.h> <valarray.h> |
- |<exception.h> <istream.h> <numeric.h> <stdexcept.h> |
- |<fstream.h> <iterator.h> |
- +----------------------------------------------------------------------+
-
- These headers are analogous to the <stdio.h> headers. If you use these
- then the std::library will appear to your code to be in the global
- namespace; that is the symbol std::cout will appear to have the name
- cout.
-
- A few exceptions to the compatibility headers apply: <bstring.h> should
- be used to retreive the contents for <string>; <mlocale.h> should be
- used for <locale>; and <mlimits.h> should be used for <limits>. If you
- use <string.h>, <limits.h>, or <locale.h>, you will retrieve the C files,
- not the C++ files. Also note that these file names are non-portable.
- If you include <bstring.h>, <mlimits.h>, or <mlocale.h> in your files,
- you will not be able to port them to other compilation systems.
-
- *********************** IMPORTANT WARNING ****************************
- We are depricating the compatibility headers in the next release, and
- will remove them entirely in a future release. Please begin converting
- you codes to the Standard header usage.
- ************************************************************************
-
- To summarize:
-
- ===================================
- #include <iostream>
-
- int main()
- {
- std::cout << "Hi\n";
- return 0;
- }
-
- // Runs fine.
- ===================================
- #include <iostream>
- using namespace std;
-
- int main()
- {
- cout << "Hi\n";
- return 0;
- }
-
- // Runs fine.
- ===================================
- #include <iostream>
-
- int main()
- {
- cout << "Hi\n";
- return 0;
- }
-
- // Error: Undefined identifier cout
- ===================================
- #include <iostream.h>
-
- int main()
- {
- cout << "Hi\n";
- return 0;
- }
-
- // Runs fine.
- ===================================
-
-
- ===================================================================
- * Header Naming Convention in MSL 2.4
- ===================================================================
-
- See notes above on namespace standard for C++ and C header names as
- defined by the C++ Standard.
-
- If you activate the C++ compiler, you will get the <cname> versions of
- the C headers and all the definitions included under __cplusplus. You
- activate the C++ compiler in one of two ways: by file type (i.e., if the
- name of the file indicates it is a C++ source file), or by preference
- panel selection. This means that your C files will now be under the std
- namespace, and that you'll get the C++ behavior of the C files. The only
- place we found a problem was with the <cmath> file (see notes in next
- section). Be very conscientious of using C headers in C++ files.
-
- The C header names and file contents have been altered to accommodate
- both the C and the C++ library without duplication of code. The contents
- of the <name.h> files have been moved into the <cname> files, and the
- <name.h> files include the <cname> files now. The "using namespace std"
- directive is in the <name.h> file and will turn namespace std on iff the
- C++ compiler is activated (i.e., if the IDE or the compiler defines
- __cplusplus). Otherwise, the expected behavior of <name.h> will be the
- same when the C compiler is activated, even though the contents are
- physically located in the <cname> file. The preprocessor handles this
- beautifully; however, it makes visually finding information a little bit
- trickier than before.
-
- - The C++ library directory has been rearranged. There are no longer
- two subdirectories (Language Support, Library Support) under the
- Include directory. All include files are now directly under the
- C++ Include directory.
-
- - Non-standard C++ headers - use at your own peril - we reserve the
- right to modify the file contents, names, and/or existence at will:
-
- algobase.h
- extbasic.h
- extfunc.h
- extmath.h
- hashfun.h
- hashmap.h
- hashmmap.h
- hashmset.h
- hashset.h
- hashtbl.h
- heap.h
- mcompile.h
- MSLstring.h
- mtools.h
- mutex.h
- new_mem.h
- RefCountedPtrArray.h
- slist.h
- tree.h
- All the compatibility headers
-
- - Non-standard C headers - use at your own peril - we reserve the
- right to modify the file contents, names, and/or existence at will
- (note: we will probably move these to Private Includes in the
- future):
-
- ansi_parms.h
- div_t.h
- mslGlobals.h
- null.h
- size_t.h
- unix.h
- va_list.h
-
- - C++ headers that have been removed entirely from the library:
-
- ios_base.h use <ios>
- mexcept.h use <stdexcept>
- mmemory.h use <memory>
- tree use <tree.h>
- valarray_double.h use <valarray>
- valarray_float.h use <valarray>
- valarray_longdouble.h use <valarray>
-
- - New C++ headers
-
- stdexcept
- stdexcept.h
-
- - C header files:
-
- Renamed/added as per standard
- cassert csetjmp cstdio ctime
- cctype climits csignal cstdlib
- cerrno clocale cstdarg cstring
- cfloat cmath cstddef
-
- New files:
- wchar.h wctype.h
- cwchar cwctype
- ciso646 iso646.h
-
- Removed:
- wchar_t.h
-
- - Note that including <limits.h>, <string.h> and <locale.h> will
- retrieve the C header files.
-
- *********************** IMPORTANT WARNING ****************************
-
- We are depricating the compatibility headers in the next release, and
- will remove them entirely in a future release. Please begin converting
- you codes to the Standard header usage.
-
- <algorithm.h> <functional.h> <list.h> <ostream.h> <streambuf.h>
- <bitset.h> <iomanip.h> <map.h> <queue.h> <typeinfo.h>
- <bstring.h> <ios.h> <mlimits.h> <set.h> <typeinfo.h>
- <complex.h> <iosfwd.h> <mlocale.h> <sstream.h> <utility.h>
- <deque.h> <iostream.h> <new.h> <stack.h> <valarray.h>
- <exception.h> <istream.h> <numeric.h> <stdexcept.h>
- <fstream.h> <iterator.h>
-
- ************************************************************************
-
- And, finally, a little humor from Ron Liechty:
-
- Sung to "Where Have All the Flowers Gone", by Peter Paul and Mary
-
- Where have all the bstrings gone
- Gone to string for everyone
-
- When will they ever learn
- When will they ever learn
-
- Where have all the name.h gone
- Gone to cname everyone
-
- When will they ever learn
- When will they ever learn
-
-
- ===================================================================
- * Notes on <cmath> vs. <math.h>
- ===================================================================
-
- <cmath> (the C++ version of math.h) is not the same as <math.h> (the
- real C <math.h> file). Specifically, Section 26.5, paragraph 6 of the
- C++ Standard overloads the float versions of the math functions. This
- causes an ambiguous reference to these routines when compiling a C
- program with the C++ compiler. We have found that some users expect
- <math.h> to be the C header, while others expect <math.h> to be the C++
- version with the overloads. We felt a compromise was necessary to assist
- folks in transitioning their codes to the new C++ standard. If you want
- <math.h> (and subsequently <cmath>) to behave like a C header, do nothing.
- The library defaults to this behavior. If you want the overloads as
- specified by the C++ Committee, you must enable the
- #define __ANSI_OVERLOAD__ in ansi_parms.h. You do not need to recompile
- the library.
-
- Comment from ansi_parms.h:
- /* hh 980217
- __ANSI_OVERLOAD__ controls whether or not the prototypes in the C++
- standard section 26.5 get added to <cmath> and <math.h> or not. If
- __ANSI_OVERLOAD__ is defined, and a C++ compiler is used, then these
- functions are available, otherwise not.
-
- There is one exception to the above rule: double abs(double); is
- available in <cmath> and <math.h> if the C++ compiler is used.
- __ANSI_OVERLOAD__ has no effect on the availability of this one function.
-
- There is no need to recompile the C or C++ libs when this switch is
- flipped.
- */
- /* #define __ANSI_OVERLOAD__ */
-
-
- ========================================================================
- * Change in x86 mathematical functions from previous x86 behavior
- ========================================================================
-
- The ansi math library for Intel does all of its intermediate calculation
- in full precision in the fpu. If using one or more of these functions in
- an expression such as y = g(x) + sqrt(x), you may now notice behavior
- differing from past versions of CW targeting x86 platforms. This is due
- to a change in the x86 compiler. The compiler now safely assumes that
- the function g(x) might need all 8 fp registers so the expression sqrt(x)
- must therefore spill out of the register into memory. You may notice
- slightly less accurate results because the memory size is smaller than
- the register. Thus, the last 16 bits of the fp register will bet rounded
- intermediately before the expression is completely calculated.
-
-
- ===================================================================
- * Using the functions in fenv.h on X86:
- ===================================================================
-
- In this version of fenv.h, the functionality provided is intended to
- match that of the Macintosh platforms. The header follows the
- current draft standard; however, there are a couple of minor
- differences on the X86 platforms.
-
- The committee changed the names of feget/setexcept to
- feget/setexceptflag. On X86, the latest are the functions and the
- former are macros defined in fenv.h.
-
- The functions feset/getprec and feset/getround are more straight-
- forward and perform better than feset/getenv as they manipulate
- particular bits of just the control word instead of the whole fp
- environment. Please use these functions instead.
-
-
- ===================================================================
- * Compiling Pro 2 MFC with MSL2.4
- ===================================================================
-
- File Metrowerks\CodeWarrior Pro 2\Win32-x86 Support\Libraries\Mfc\
- MFC 4.2 Source\OLEMisc.cpp, on or about line 964:
-
- Change from:
- swprintf(lpszBuf, (unsigned short *)lpszLinkedTypeFmt, lpszFullUserTypeName);
-
- To:
- swprintf(lpszBuf, sizeof(lpszBuf), lpszLinkedTypeFmt, lpszFullUserTypeName);
-
- You need to change the system access paths for the MFC42.mcp project file to:
- {Compiler}Metrowerks Standard Libraries\
- {Compiler}Win32-x86 Support\Headers
- These are the only two paths in the system access paths; all others are
- to be deleted.
-
- Pro 3 MFC works without changes with MSL2.4.
-
-
- ===================================================================
- * WinSIOUX in MSL 2.4
- ===================================================================
-
- The Mac SIOUX-like project is now available for Windows. This means that
- a new console window for WIN32 applications is available that permits
- saving stdout to a file, printing it from a menu option, and includes a
- scroll bar. A new stationary on the windows platforms is included, named
- WinSIOUX. You will not get the standard DOS/NT console if you use this
- stationary. The remaining functions from SIOUX will be included in future
- releases (for example, cut and paste, selecting font, and opening/closing
- files from the menu).
-
-
- ===================================================================
- * Wide Character Support in MSL 2.4
- ===================================================================
-
- Wide character support is now included in Metrowerks Standard Library,
- which allow the use of extended character sets such as Kanji, and Unicode
- on win32 platforms. This is a preliminary release and has not been
- fully tested or optimized for wide character streams.
-
- The C++ built-in wchar_t is enabled with the preference panels. In order
- to get the built-in wchar_t for C++ programs, you must have both the C++
- compiler AND the wide character support boxes marked in the preference
- panels; otherwise, you will get the typedef appropriate for the
- architecture as defined in stddef.h.
-
- There are two include files that make up the support for wchar: cwchar
- and cwctype. The sources for these routines are compiled into the
- standard C libraries and do not need to be included in your project.
-
- All routines listed below abide by the standards with exceptions listed
- as Non-Standard Behavior below.
-
- The routines for wchar.h include:
-
- fgetwc fgetws fputwc fputws fwprintf fwscanf
- getwc getwchar putwc putwchar swprintf swscanf
- vfwprintf vfwscanf vswprintf vswscanf vwprintf vwscanf
- wcscat wcschr wcscmp wcscoll wcscpy wcscspn
- wcsftime wcslen wcsncat wcsncmp wcsncpy wcspbrk
- wcsrchr wcsspn wcsstr wcstod wcstok wcstol
- wcstoll wcstoul wcstoull wcsxfrm wmemchr wmemcmp
- wmemcpy wmemmove wmemset wprintf wscanf
-
- The routines for wctype.h include:
-
- iswalnum iswalpha iswcntrl iswdigit iswgraph iswlower
- iswprint iswpunct iswspace iswupper iswxdigit towctrans
- towlower towupper wctrans
-
- Non-Standard Behavior
-
- 1. The multibyte routines are not supported in the current
- implementation. These routines are documented in the headers as
- non-implemented.
-
- btowc mbrlen mbrtowc mbsinit mbsrtowcs wcrtomb
- wcsrtombs wtomb
-
- 2. The function fwide is also not supported in this release and is
- documented in the headers as such.
-
- 3. The routine wscanf will not perform as per the standard due to the
- lack of fwide.
-
- 4. The console will not be set properly for wide character input or
- output without the fwide function.
-
-
- ===================================================================
- Miscellaneous Notes and Pro 2 Notes Relevant to Pro 3
- ===================================================================
-
- * Compiling SGI's STL with Pro 3:
- The current version of SGI's STL may be incompatible with the Pro3
- compiler and MSL 2.4 library. A compatible version of SGI's STL will
- be available shortly at
- <http://www.metrowerks.com/tools/misc/hotlist.html>
-
- * Precompiled header stationary sets precompiled headers to 4i-8d.
- When using precompiled headers built from the stationary, please
- ensure that the libraries you include in your project are also 4i-8d.
- If changing the precompiled headers preferences panels, please ensure
- that you build the associated libraries you plan to use with the same
- options. A "#pragma check_header_flags" has been added to MSL.pch++
- to help check for these types of errors.
-
- * Improved clock for Mac platforms
- To increase the tick count for the Mac platforms in order to use the
- facilities the Operating System provides, please change the following
- file:
- Metrowerks Standard Library/MSL C/MSL Mac/Public Includes/
- timesize.mac.h
- This file introduces a define (__TIMESIZE_DOUBLE) which enables the
- improved clock code in time.h and time.mac.c. Please note that the
- clock_t typedef will change from an unsigned long to a type double.
- This also means that the clock function will change types. Be sure
- you confirm in your code base that your return values are typed
- accordingly for clock and clock_t.
-
- * Multi-target project files. You will see new project files with the
- string MTrg included in the project name. This means that the project
- file can emit all targets from that single file, depending on your
- selection when you open the project file and choose a target. However,
- it takes more time to open the multi-target project files. This was
- done for the windows platforms because scripting is not available in
- the IDE on windows.
-
- * Console applications for windows projects now stop before exiting so
- that output can be viewed. This feature can be turned off by setting
- the preprocessor macro STOP_PROGRAM_BEFORE_EXIT in the windows
- prefix file, ansi_prefix.win32.h. Be sure to rebuild MSL C after
- making this change. Please note that if you redirect output to a
- serial device (such as a printer), you must still press enter to
- exit the program.
-
- * There is a vbscript script in the "Metrowerks Standard Library"
- directory that rebuilds the precompiled header files, the win32
- runtime, and all MSL libraries. Read the information at the top of
- the script file "msl_build.vbs" if you have problems running the
- script. The file "msl_list" in the same directory can be configured
- to build exactly those libraries you wish to build. If errors occur
- while building, they are logged in the file "error.log" in the
- "Metrowerks Standard Library" directory.
-
-
- ========================================================================
- Contacting Metrowerks
- ========================================================================
-
- For bug reports, technical questions, and suggestions, please use the
- forms in the Release Notes folder on the CD, and send them to
-
- support@metrowerks.com
-
- See the CodeWarrior on the Nets document in the Release Notes folder for
- more contact information, including a list of Internet newsgroups,
- online services, and patch and update sites.
-
- ========================================================================
-
- Metrowerks Corporation
-